local data = ARGV[1]
local status = ARGV[2]
local blogId = ARGV[3]
local deleteKey = "blog:liked:delete"
local saveKey = "blog:liked:save"
local key = "blog:liked:"
-- 取消点赞
if status == "delete" then
    -- 点赞数量-1
    redis.call("zincrby", key, -1, blogId)
    --点赞数量小于0，异常取消点赞，删除该统计数据，并不会记录在删除列表中
    if tonumber(redis.call("zscore", key, blogId)) < 0 then
        redis.call("zrem", key, blogId)
        return
    end
    -- 判断是否在点赞列表中，不在则添加到删除列表中，在就取消点赞列表中的这条记录
    if redis.call("sismember", saveKey, data) == 0 then
        if tonumber(redis.call("sadd", deleteKey, data)) == 0 then
            -- 不在点赞列表中，添加到删除列表中，但是添加失败，说明是重复取消点赞，点赞数量恢复
            redis.call("zincrby", key, 1, blogId)
        end
    else
        redis.call("srem", saveKey, data)
    end
else
    --点赞
    if status == "save" then
        -- 点赞统计数量+1
        redis.call("zincrby", key, 1, blogId)
        -- 判断是否在取消点赞列表中
        if redis.call("sismember", deleteKey, data) == 0 then
            --不在取消点赞列表中，添加到点赞列表
            if tonumber(redis.call("sadd", saveKey, data)) == 0 then
                --添加失败，说明是重复点赞，恢复统计数量
                redis.call("zincrby", key, -1, blogId)
            end
        else
            -- 在就删除取消点赞列表中的这条记录
            redis.call("srem", deleteKey, data)
        end
    end
end
